import os
import sys
import subprocess
import shutil
from pathlib import Path

def main():
    print("===== 简易画图板应用打包工具 =====\n")
    
    # 检查PyInstaller是否已安装
    try:
        import PyInstaller
        print("PyInstaller已安装，版本:", PyInstaller.__version__)
    except ImportError:
        print("PyInstaller未安装，正在安装...")
        subprocess.call([sys.executable, "-m", "pip", "install", "pyinstaller"])
    
    # 检查Pillow是否已安装
    try:
        from PIL import Image
        print("Pillow已安装")
    except ImportError:
        print("Pillow未安装，正在安装...")
        subprocess.call([sys.executable, "-m", "pip", "install", "pillow"])
    
    # 创建资源文件夹（如果不存在）
    resources_dir = Path("resources")
    if not resources_dir.exists():
        resources_dir.mkdir()
        print("创建资源文件夹")
    
    # 检查图标文件
    icon_path = resources_dir / "icon.ico"
    svg_icon_path = resources_dir / "icon.svg"
    
    # 如果有SVG图标但没有ICO图标，尝试转换
    if not icon_path.exists() and svg_icon_path.exists():
        try:
            from PIL import Image
            import cairosvg
            print("正在将SVG图标转换为ICO格式...")
            png_temp = "temp_icon.png"
            cairosvg.svg2png(url=str(svg_icon_path), write_to=png_temp)
            img = Image.open(png_temp)
            img.save(str(icon_path))
            os.remove(png_temp)
            print(f"图标已转换并保存到 {icon_path}")
        except ImportError:
            print("警告: 无法转换SVG图标，缺少cairosvg库。将使用默认图标。")
            print("如需自定义图标，请安装cairosvg: pip install cairosvg")
    
    # 询问打包类型
    print("\n请选择打包类型:")
    print("1. 单文件模式 (--onefile, 生成单个exe文件，启动较慢)")
    print("2. 文件夹模式 (生成带文件夹的应用，启动更快)")
    
    choice = input("请选择 [1/2] (默认: 1): ").strip() or "1"
    
    # 构建PyInstaller命令
    cmd = [sys.executable, "-m", "PyInstaller", "--windowed"]
    
    if choice == "1":
        cmd.append("--onefile")
    
    # 添加图标（如果存在）
    if icon_path.exists():
        cmd.extend(["--icon", str(icon_path)])
    
    # 添加主程序文件
    cmd.append("main.py")
    
    # 添加名称
    cmd.extend(["--name", "简易画图板"])
    
    # 执行打包命令
    print("\n开始打包...")
    print("执行命令:", " ".join(cmd))
    subprocess.call(cmd)
    
    print("\n打包完成!")
    
    # 显示输出位置
    dist_path = Path("dist")
    if choice == "1":
        exe_path = dist_path / "简易画图板.exe"
        if exe_path.exists():
            print(f"可执行文件已生成: {exe_path.absolute()}")
    else:
        folder_path = dist_path / "简易画图板"
        if folder_path.exists():
            print(f"应用文件夹已生成: {folder_path.absolute()}")
            print(f"可执行文件: {(folder_path / '简易画图板.exe').absolute()}")
    
    print("\n感谢使用打包工具!")

if __name__ == "__main__":
    main()